Ŀ Ŀ QuickBasic'de karlatm sorunlar nasl atm? Minik baz sorunlar ٳ PS 31 ubat'96 Grol Demir Bu ay basic dilinde minik baz sorunlarn halli zerinde duralm. Konumuz alt balklar yle: a) Sralama algoritmas b) Trke heceleme c) Binary dosya yaps d) Hscplayer'in basic'e monte edilmesi Ŀ Ĵ Sralama algoritmas Sanrm yaptnz programlarda zaman zaman verilerinizi sraya sokma ihtiyac duydunuz. Bunun iin klielemi bir yntem vardr. Klasik olan bu yntemin algoritmas yledir. (Ama verilerin bykten ke doru sralanmas) 1 - Sayac1'i sfrla 2 - Sayac1'i bir arttr 3 - Sayac1 toplam veri adedini geti mi? a) Evet : program bitir.(10'na git) b) Hayr: devam et 4 - Sayac1 ile tanmlanan veriyi al 5 - Sayac2'yi sfrla 6 - Sayac2'yi bir arttr 7 - Sayac1 toplam veri adedini geti mi? a) Evet : 2'ye git b) Hayr: devam et 8 - Sayac2 ile tanmlanan veriyi al 9 - Sayac1 ve Sayac2 ile aretlenen iki veriyi kyasla a) Eit : 6'ya git b) Sayac1 ile aretli veri daha byk : 6'ya git c) Sayac2 ile aretli veri daha byk : Verileri deitir ve 6'ya git 10 - Biti (Ama verilerin kkten bye doru sralanmas) 1 - Sayac1'i sfrla 2 - Sayac1'i bir arttr 3 - Sayac1 toplam veri adedini geti mi? a) Evet : program bitir.(10'na git) b) Hayr: devam et 4 - Sayac1 ile tanmlanan veriyi al 5 - Sayac2'yi sfrla 6 - Sayac2'yi bir arttr 7 - Sayac1 toplam veri adedini geti mi? a) Evet : 2'ye git b) Hayr: devam et 8 - Sayac2 ile tanmlanan veriyi al 9 - Sayac1 ve Sayac2 ile aretlenen iki veriyi kyasla a) Eit : 6'ya git b) Sayac1 ile aretli veri daha kk : 6'ya git c) Sayac2 ile aretli veri daha kk : Verileri deitir ve 6'ya git 10 - Biti Rakamsal verilerde ve standart metin dosyalarnda geerli bu yntem trke karakter bulunan stringlerde ie yaramaz. rnein "" harfi bu usulde "Z" den sonra gelir. Aada verilen modl ise Trke verileri dzgn bir sraya sokar. Ŀ 'Bu program trke karakterlerin yer ald stringleri sralar '============================= Tanmlar ========================== Enson = 5 'Toplam veri says Nerden = 1 'Kanc karakter baz alnacak Uzunluk = 50 'En uzun verinin boyu Tercih = 1 'Kkten bye ters sralama '1 den farkl ise dz sralama yapar REDIM Veri$(Enson) Veri$(1) = "amlbel" Veri$(2) = "Ceyhan" Veri$(3) = "alma" Veri$(4) = "ald" Veri$(5) = "deneme" '======================= Sralama program ====================== CLS : PRINT "Sralama yapyorum" FOR I = 1 TO Enson: FOR Y = 1 TO Enson: FOR z = Nerden TO Uzunluk Veri$(Y) = LEFT$(Veri$(Y) + SPACE$(Uzunluk), Uzunluk) Veri$(I) = LEFT$(Veri$(I) + SPACE$(Uzunluk), Uzunluk) B = ASC(MID$(Veri$(Y), z, 1)): C = ASC(MID$(Veri$(I), z, 1)) IF B <> C THEN SELECT CASE CHR$(B) CASE "", "": B = 67.5 CASE "", "": B = 71.5 CASE "i", "": B = 73.5 CASE "", "": B = 79.5 CASE "", "": B = 83.5 CASE "", "": B = 85.5 CASE "I": B = 73 CASE ELSE: B = (223 AND B) END SELECT SELECT CASE CHR$(C) CASE "", "": C = 67.5 CASE "", "": C = 71.5 CASE "i", "": C = 73.5 CASE "", "": C = 79.5 CASE "", "": C = 83.5 CASE "", "": C = 85.5 CASE "I": C = 73 CASE ELSE: C = (223 AND C) END SELECT SELECT CASE B CASE C CASE ELSE SELECT CASE Tercih CASE 1 IF B < C THEN SWAP Veri$(I), Veri$(Y) CASE ELSE IF B > C THEN SWAP Veri$(I), Veri$(Y) END SELECT EXIT FOR END SELECT END IF NEXT: NEXT: NEXT '==========================Ekrana dkm =========================== CLS : FOR I = 1 TO Enson: PRINT Veri$(I): NEXT Ŀ Ĵ Heceleme algoritmas Kelime ilemci programlamaya soyunan kiiler iin bilinmesi gereken algoritmalardan birisi de trke heceleme algoritmasdr. Trke heceleme yapmak iin uzun uzun dil bilgisi kurallarn bilmek gerekmez. Sadece sesli harfleri tanmak yeterlidir. Sesli harfler herkesin bildii gibi "aeiou" dr. Temel mantk udur. Bir kelimede ilk sesli harf bulunur, sonra ikinci sesli harf bulunur. Bunlarn bulunduu yer arasnda ki mesafe heceyi belirler. yleki; a) Hi sesli harf yok : Kelimenin tamam tek hecedir b) Tek sesli harf var : Kelimenin tamam tek hecedir c) ki sesli harfin yerleri arasnda tek karakterlik mesafe var: ilk hece= Kelimenin ba ile ilk seslinin bulunduu yer d) ki sesli harfin yerleri arasnda ok mesafe var: ilk hece= Kelimenin ba ile ilk seslinin bulunduu yerin bir fazlas Aadaki program bu konuda bir rnektir. Ŀ Sesli$ = "AaEeiIOoUu" Kelime$ = "ekoslavakyallatrmadklarmzdanmsnz?" CLS DO GOSUB Hece Kelime$ = RIGHT$(Kelime$, LEN(Kelime$) - LEN(Hece$)) IF LEN(Kelime$) = 0 THEN PRINT Hece$ EXIT DO END IF PRINT Hece$; "-"; LOOP END Hece: Yer1 = 0 'Birinci sesli harfin yeri Yer2 = 0 'kinci " " " FOR I = 1 TO LEN(Kelime$) IF Yer1 = 0 THEN IF INSTR(Sesli$, MID$(Kelime$, I, 1)) > 0 THEN Yer1 = I ELSE IF Yer2 = 0 THEN IF INSTR(Yer1, Sesli$, MID$(Kelime$, I, 1)) > 0 THEN Yer2 = I END IF END IF NEXT IF Yer1 > 0 AND Yer2 > 0 THEN IF Yer2 - Yer1 > 2 THEN Ara = Yer1 + 1 ELSE Ara = Yer1 Hece$ = LEFT$(Kelime$, Ara) ELSE IF Yer1 = 0 THEN Hece$ = Kelime$ 'Sesli harf yok IF Yer2 = 0 THEN Hece$ = Kelime$ 'Tek sesli harf var END IF RETURN Ŀ Ĵ Binary dosya yaps ou programc iin bir dosyann herhangi bir yerinden istenilen uzunlukta veri okunmas veya yazlmas bir sorundur. Uygulamada grdm baz gereksiz program satrlar binary dosya yapsn anlatmama neden olmutur. Diyelim ki bir data dosyanz var. Bu dosyann 1243 nc konumundan 37 byte okumak, 2587 nci konumuna 3 byte yazmak silmek istiyorsunuz. Dosyay sral okuma, sral yazma, rastgele okuma yazma gibi trlerde aarsanz bu ilemleri kolay yapamazsnz. Oysa binary aarsanz bu iler ok kolay rnekleyelim. OPEN "DENE.DAT" FOR BINARY AS 1 'Dosya ald A$= SPACE$(37): GET 1, 1243, A$ '1243'den 37 byte okundu A$= "123": PUT 1, 2587, A$ '2587'ye 3 byte yazld Binary dosya yapsnn kolaylklar bununla bitmiyor. rnein bir dosyadaki rakamsal veri eer tek byte smyorsa yaplan klasik ilem yleydi (deer= birinci byte deeri*256 + ikinci byte deeri) oysa binary yapda bu i (GET 1,,Deger%) komutu ile kendiilinden yaplyor. Son olarak binary yap ile database programlarn dosya hzlarna basic dili ile ulalabildiini belirtteyim. lgilenen olursa bu konuya tekrar dneriz. Bu sayda bir dosyann istenilen yerinden istenilen byte uzunlukta bir ksm silerek dosyay tekrar ayn isimle size geri veren bir program modl de veriyoruz. Ŀ Ĵ Hscplayer'in basic'e monte edilmesi Adlib uyumlu ses kartlarnda almak zere tasarlanm bir src var. Bu src (.hsc) modunda yazlm ses dosyalarn hemen her dilde kolaylkla dinlenebilmesi iin yazlm. Ŀ HSC-Tracker V1.2 (C)1993 by Zwerg Zwack and Chicken Soundroutine (C) 1992/93 by NEO Software Produktions GmbH Home of HSC-Tracker: The Lycaeum +41 41-762-989 (v32b,v42b) Registered to you! Dkman dosyasnda bu ekilde bir giri yapan bu mtevazi insanlarn yaptklar src gerekten tam bir harika. Programlarnn bedava olduunu ve bedava olmak kouluyla dier programlarda da kullanlmas iin izin verdiklerini belirten bu kiileri yrekten kutlarm. Srcnn herhangi bir bellek alanna sfrnc offsetinden balamak zere atlmas ve sonra da dinlenmek istenen dosyann okutulup verilerin segment ve offset adreslerinin bu srcye bildirilmesi gerekiyor. Basic programclar iin oldukca karmak saylacak bu yap iin sizlere program gnderiyorum. Bu programlar hakknda ksaca bilgiler: Ŀ Hscdinle.Asm isimli kaynak kod Bu hscplayer ile birlikte gerekli bir ka yordam ieriyor. Basic programclar kullanmak iin; Versiyon 7.1 'de DEL HSCDINLE.LIB TASM HSCDINLE/m LIB QBX *INTRPT LIB HSCDINLE +INTRPT+HSCDINLE,; LINK/Q HSCDINLE.LIB,HSCDINLE.QLB,,QBXQLB; QBX/L HSCDINLE Versiyon 4.5 'de DEL HSCDINLE.LIB TASM HSCDINLE/m LIB QB *INTRPT LIB HSCDINLE +INTRPT+HSCDINLE,; LINK/Q HSCDINLE.LIB,HSCDINLE.QLB,,BQLB45; QB/L HSCDINLE eklinde bir batch dosya altrmalar gerekiyor. Ŀ Hscdinle.Bas isimli kaynak kod Bu kaynak kod sadece versiyon 7.1'de almak zere tasarland. Gerekce ise gayet basit nk bu versiyonda "ON LOCAL ERROR", "CURDIR$" gibi gelimi komutlar var. Bu programn ayrca .exe'si de verildi. Porgram vastasyla hsc mzik dinleyebilir, bu dinlemeyi tsr olarak yapabilirsiniz. Olduka beeni alan bir program olduunu belirtmeliyim. Ŀ Hscbas.Bas isimli kaynak kod Bu program ise her iki versiyonda yani versiyon 4.5'da dahil olmak zere hsc mzik dinlemeye bir rnek olarak hazrland. Unutulmamas gereken bir nokta her iki program iin basice "QBX /L HSCDINLE" veya "QB /L HSCDINLE" eklinde balamak gerekiyor. Ŀ Odam.Hsc isimli mzik dosyas Sevgili M.Doan ZDEMR tarafndan yaplm, .hsc formatnda gzel ve trke bir melodi. Daha baka .hsc mzikler iin kendisine internet zerinden "Dogano@Doruk.com.tr" adresi yoluyla ulaabilirsiniz. Grmek zere... Adres: PC World/Trkiye PS-Grol Demir Eski Bykdere cad. Sanayi mah. Behet sokak No:25/B Kat:5 80650 4.Levent / STANBUL Internet : gurold@doruk.com.tr